package com.evil.application.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.evil.application.pojo.dto.form.rule.SnRuleRespDTO;
import com.evil.application.pojo.entity.ApplicationForm;
import com.evil.application.pojo.entity.ApplicationFormSnRule;
import com.evil.common.application.dto.order.data.ControlDataDTO;

import java.util.List;
import java.util.Map;

/**
 * 表单编号规则表
 *
 * @author liyang
 * @date 2022-08-08 00:00
 */
public interface ApplicationFormSnRuleService extends IService<ApplicationFormSnRule> {

    /**
     * 获取表单编号规则列表
     *
     * @param formId formId
     * @return ApplicationFormSnRule 列表
     */
    List<ApplicationFormSnRule> findByFormId(Long formId);

    /**
     * 获取表单编号规则基础信息列表
     *
     * @param formId formId
     * @return SnRuleRespDTO 列表
     */
    List<SnRuleRespDTO> findBaseByFormId(Long formId);

    /**
     * 保存表单编号生成规则
     *
     * @param applicationForm applicationForm
     * @param snRules         snRules
     */
    void modifyFormSnRule(ApplicationForm applicationForm, List<SnRuleRespDTO> snRules);

    /**
     * 删除表单编号规则
     *
     * @param formId formId
     */
    void deleteByFormId(Long formId);

    /**
     * 复制表单编号规则
     *
     * @param source       复制源表单
     * @param target       复制目标表单
     * @param controlIdMap 复制新旧映射表
     */
    void copyFormSnRule(ApplicationForm source, ApplicationForm target, Map<Long, Long> controlIdMap);

    /**
     * 创建表单规则
     *
     * @param form form
     * @return ApplicationFormSnRule
     */
    ApplicationFormSnRule createFormSnRule(ApplicationForm form);

    /**
     * 删除表单规则
     *
     * @param form form
     */
    void deleteFormSnRule(ApplicationForm form);

    /**
     * 生成订单编号
     *
     * @param applicationForm applicationForm
     * @param data            data
     * @return String
     */
    String generateSn(ApplicationForm applicationForm, List<ControlDataDTO> data);

}
